"""
编写函数，接收两个正整数作为参数，返回一个元组，其中第一个元素为两个正整数的最大公约数，第二个元素为其最小公倍数，输出最大公约数和最小公倍数。
"""
def demo(m, n):
    p = m * n
    while m % n != 0:
        m, n = n, m % n
    return n, p // n
a = int(input('请输入其中一个整数：'))
b = int(input('请输入另一个整数：'))
c = demo(a, b)
print('{}和{}的最大公约数为{}'.format(a, b, c[0]))
print('{}和{}的最小公倍数为{}'.format(a, b, c[1]))
"""
核心算法：辗转相除法
辗转相除法的原理：两个数的最大公约数等于其中较小的数和两数相除余数的最大公约数。

以12 和 18 为例
初始状态：
m = 12, n = 18
p = m × n = 12 × 18 = 216（保存乘积用于计算最小公倍数）

第一次循环：
条件：m % n = 12 % 18 = 12 ≠ 0（进入循环）
执行：m, n = n, m % n → m=18, n=12

第二次循环：
条件：m % n = 18 % 12 = 6 ≠ 0（进入循环）
执行：m, n = n, m % n → m=12, n=6

第三次循环：
条件：m % n = 12 % 6 = 0（退出循环）

返回结果：
最大公约数 = n = 6
最小公倍数 = p ÷ n = 216 ÷ 6 = 36
"""